#include <unistd.h>
#include <stdio.h>
#include <pthread.h>

int tickets = 3;

void* allen(void* arg) {
  int flag = 1;
  while(flag) {
    // 从数据库中读取余票数，此操作假设消耗 20 ms
    int t = tickets;
    usleep(1000*20);// 20ms

    // 查看到余票数量 > 0，就打印 allen 买到一张票
    if (t > 0) {
      printf("allen buy a ticket\n");
      // 将余票数量减 1，再保存回数据库，此操作消耗 20 ms
      --t;
      usleep(1000*20);// 20ms
      tickets = t;
    }
    else flag = 0;
    // 买完票后，休息 20 ms
    usleep(1000*20);// 20ms
  }
  return NULL;
}

void* luffy(void* arg) {
  int flag = 1;
  while(flag) {
    int t = tickets;
    usleep(1000*20);
    if (t > 0) {
      printf("luffy buy a ticket\n");
      --t;
      usleep(1000*20);// 20ms
      tickets = t;
    }
    else flag = 0;
    usleep(1000*20);// 20ms
  }
  return NULL;
}
int main() {
  pthread_t tid1, tid2;
  pthread_create(&tid1, NULL, allen, NULL);
  pthread_create(&tid2, NULL, luffy, NULL);
  pthread_join(tid1, NULL);
  pthread_join(tid2, NULL);
  return 0;
}
